第2回講義へようこそ。このコースの全体的な目標を確認した後、アルゴリズム設計の基本となるデータ構造である「配列」と「リンクリスト」について学びます。データ構造が、アルゴリズム設計の基盤となるものです:配列とリンクリスト。
配列とリンクリストは、メモリ上でのデータの整理方法として最も基本的かつ重要な手段であり、連続分散のストレージ管理における根本的な対立関係を象徴しています。
定義:データ構造とは、効率的なアクセスと変更を可能にするために、データを特定の形式で整理・保存する仕組みのことです。

  • 配列は要素を連続連続したメモリ領域に格納し、要素のアドレスを直接計算できるようにします。
  • リンクリストは要素を分散分散したメモリ領域に格納し、明示的なポインタのみで接続されています。
  • 配列のアクセスは直接インデックス参照($O(1)$)ですが、リンクリストのアクセスには走査(トラバーサル)($O(n)$)が必要です。
  • 配列での挿入・削除には要素のシフトが必要となり、結果として$O(n)$の計算量になります。
  • リンクリストでの挿入・削除は、ポインタの再リンクだけで済み、位置 $i$ がわかっている場合、$O(1)$ の時間で実行可能です。
  • リンクリストは、各ノードにデータに加えてメモリオーバーヘッド`next` ポインタを保持しなければならないため、より高いメモリオーバーヘッドが発生します。

計算量の比較

特徴配列単方向リンクリスト
メモリ割り当て連続(固定ブロックサイズ $n$)分散(動的ポインタ)
アクセス時間$O(1)$$O(n)$
挿入・削除$O(n)$$O(1)$(位置 $i$ が既知の場合)
メモリオーバーヘッド最小限(データのみ)高め(データ + nextポインタ)